home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Camelot
/
Camelot 035 (1989-01)(Swedish User Group of Amiga)(SE)(PD)[m doscopy][WB].zip
/
Camelot 035 (1989-01)(Swedish User Group of Amiga)(SE)(PD)[m doscopy][WB].adf
/
Null
/
null.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-12-12
|
3KB
|
102 lines
/****************************************************************************
*
* null driver V0.0 (c)CopyRight 1988, Gunnar Nordmark. All Rights Reserved.
*
* null-handler Ver. 0.0 20-Jul-1988
*
* Gunnar Nordmark
* Nora strand 5
* 182 34 DANDERYD
* SWEDEN
*
* |You may freely distribute this source as long as |
* |the Copyright notice is left intact. |
***************************************************************************/
#undef BADDR
#define BADDR(x) ((APTR)((long)x << 2))
#define ACTION_FINDINPUT 1005L
#define ACTION_FINDOUTPUT 1006L
#define ACTION_END 1007L
#define DOS_FALSE 0L
#define DOS_TRUE -1L
/* My Globals */
long SysBase;
struct Process *myproc;
_main()
{
extern void returnpkt(); /* sends back the packet */
extern void returnpktplain(); /* use args in Res1 */
extern struct DosPacket *taskwait();
char *version = "Ver 0.0 (c) Gunnar Nordmark 1988";
struct DosPacket *mypkt; /* a pointer to the dos packet */
struct DeviceNode *mynode; /* our device node (parmpkt Arg3) */
struct FileHandle *fh; /* a pointer to our file handle */
long run = TRUE; /* handler main loop flag */
int null_open = 0; /* null open count */
/* Initializing the handler */
myproc = (struct Process *)FindTask(0L);
mypkt = taskwait(myproc); /* Wait for my startup message */
/* I don't need the name or extra info passed in Arg1/2 */
mynode = (struct DeviceNode *)BADDR(mypkt->dp_Arg3);
mynode->dn_Task = &myproc->pr_MsgPort;
returnpkt(mypkt, myproc, DOS_TRUE, mypkt->dp_Res2);
/* done initial stuff, now for some work */
while(run) {
mypkt = taskwait(myproc);
switch(mypkt->dp_Type) { /* find what action to perform */
case ACTION_FINDINPUT:
case ACTION_FINDOUTPUT:
null_open++;
fh = (struct FileHandle *)BADDR(mypkt->dp_Arg1);
fh->fh_Arg1 = mypkt->dp_Type;
fh->fh_Port = (struct MsgPort *)DOS_FALSE; /* not interactive */
returnpkt(mypkt, myproc, DOS_TRUE, mypkt->dp_Res2);
break;
case ACTION_READ:
returnpkt(mypkt, myproc, 0, mypkt->dp_Res2); /* zero-length=EOF */
break;
case ACTION_WRITE:
mypkt->dp_Res1 = mypkt->dp_Arg3; /* tell em we wrote them all */
returnpktplain(mypkt, myproc);
break;
case ACTION_END:
if (--null_open == 0)
run = 0;
returnpkt(mypkt, myproc, DOS_TRUE, mypkt->dp_Res2);
break;
default:
returnpkt(mypkt, myproc, DOS_FALSE, ERROR_ACTION_NOT_KNOWN);
break;
}
} /* end while */
mynode->dn_Task = FALSE;
}